﻿#include <iostream>
#include <cassert>

using namespace std;

class Target
{
public:
    Target() = default;
    virtual ~Target() {}

    virtual void Request() {
        cout << "Request" << endl;
    }
};

class Adaptee
{
public:
    Adaptee() = default;
    virtual ~Adaptee(){}

    virtual void SpecialRequest() {
        cout << "Special Request" << endl;
    }
};

class Adapter:public Target
{
public:

	Adapter() { }
    virtual ~Adapter() { }

    virtual void Request()
    {
            m_Adaptee.SpecialRequest();
    }
private:
    Adaptee m_Adaptee;
};

int main()
{
    Adapter* adapter = new Adapter();
    adapter->Request();

    delete adapter;
    adapter = nullptr;

    return 0;
}
